<?php
/**
 * Autor               :    Juan Jose Mu�iz Juarez
 * Fecha de Creacion   :    03/05/2012,  20:49:12
 * Version             :    1.0
 * Descripcion         :
 */

if ( !defined( "RUTA_FISICA_SISTEMA" ) )
{
   require_once "../../../config/Constantes.php";
}
 
$ruta_sistema = RUTA_FISICA_SISTEMA . "/sistema/";

require_once $ruta_sistema . "general/clases/comun/base_datos/DataBase.php";
require_once $ruta_sistema . "config/base_datos/ConexionTmp.php";

require_once $ruta_sistema . "general/clases/comun/generacion_modelo/ModeloBD.php";
require_once $ruta_sistema . "general/clases/comun/GeneralORM.php";

 
$conexion = new ConexionTmp();

// Recibimos los parametros

$opcion             = "";
$base_datos         = "";
$tabla              = "";
$opcion_generar     = "";
$ubicacion_modelo   = "";
$ubicacion_clase    = ""; 
$ubicacion_base     = "";
$campo_id           = "";
$autoincremental    = "";

if ( isset( $_POST[ "op" ] ) )
  {
    $opcion = $_POST[ "op" ];
  }
else
  {
    if ( isset( $_GET[ "op" ] ) )
      {
         $opcion = $_GET[ "op" ];
      }
  }  
if ( isset( $_POST[ "db" ] ) )
  {
    $base_datos = $_POST[ "db" ];
  }
else
 {
    if ( isset( $_GET[ "db" ] ) )
    {
       $base_datos = $_GET[ "db" ];
    }
 }  
 
if ( isset( $_POST[ "tabla" ] ) )
 {
    $tabla = $_POST[ "tabla" ];
 }
else
 {
    if ( isset( $_GET[ "tabla" ] ) )
    {
       $tabla = $_GET[ "tabla" ];
    }
 } 
 
if ( isset( $_POST[ "generar" ] ) )
 {
    $opcion_generar = $_POST[ "generar" ];
 }
else
 {
    if ( isset( $_GET[ "generar" ] ) )
    {
       $opcion_generar = $_GET[ "generar" ];
    }
 }
 
 if ( isset( $_POST[ "ubicacion_c" ] ) )
  {
    $ubicacion_clase = $_POST[ "ubicacion_c" ];
  }
 else
  {
    if ( isset( $_GET[ "ubicacion_c" ] ) )
      {
         $ubicacion_clase = $_GET[ "ubicacion_c" ];
      }
  }
  
if ( isset( $_POST[ "ubicacion_m" ] ) )
  {
     $ubicacion_modelo = $_POST[ "ubicacion_m" ];
  }
else
  {
     if ( isset( $_GET[ "ubicacion_m" ] ) )
      {
         $ubicacion_modelo = $_GET[ "ubicacion_m" ];
      }
  }  
  
if ( isset( $_POST[ "ubicacion_base" ] ) )
  {
     $ubicacion_base = $_POST[ "ubicacion_base" ];
  }
else
  {
     if ( isset( $_GET[ "ubicacion_base" ] ) )
      {
         $ubicacion_base = $_GET[ "ubicacion_base" ];
      }
  } 

if ( isset( $_POST[ "autoincremental" ] ) )
  {
     $autoincremental = $_POST[ "autoincremental" ];
  }
else
  {
     if ( isset( $_GET[ "autoincremental" ] ) )
       {
          $autoincremental = $_GET[ "autoincremental" ];
       }
  }

if ( isset( $_POST[ "campo_id" ] ) )
  {
     $campo_id = $_POST[ "campo_id" ];
  }
else
  {
     if ( isset( $_GET[ "campo_id" ] ) )
       {
         $campo_id = $_GET[ "campo_id" ];
       }
  }  

 /* if ( $opcion == "generar" )
    echo $opcion . " " . $base_datos . " ". $tabla . " ". $ubicacion_modelo . " ";
  */
if ( $opcion )
  {     
     switch ( $opcion )
       {
          case "base_datos":
             {
                // Cargamos las tablas de mysql;
                $query = "SHOW DATABASES";
                //$resultados = DataBase::query( $query, null, null, null, true, $conexion -> getConexion() );
                
                $resultados = mysql_query( $query, $conexion -> getConexion( "CGeneracionClaseModelo" ) );
                
                if ( $resultados )
                  {
                     $datos = array();
                     
                     while ( $tablas = DataBase::getArrayResult( $resultados ) )
                      {                      
                        $datos[] = array( "base_datos" =>  $tablas[ "Database" ] );
                      }
                      
                    echo json_encode( $datos );  
                 }
                 
                 break;
             }
          case "tablas":
             {
                $query = "SHOW Tables";
                
                $query = mysql_real_escape_string( $query );
                
                //var_dump( $query );
                
                $db_seleccionada = $conexion -> getConexionDB( $base_datos, "CGeneracionClaseModelo" );
                
                $resultados = DataBase::query( $query, "CGeneracionClasesModelo", null, null, true , $db_seleccionada );
                
                //$resultados = mysql_query( $query, $conexion -> getConexion( "CGeneracionClaseModelo" ) ) or die( "Error al conectar la base de datos" . mysql_error()  );
                
                if ( $resultados )
                  {
                     $datos = array();
                     
                     $contador = 1;
                     
                     while ( $tablas = DataBase::getArrayResult( $resultados, false ) )
                      {                      
                        $datos[] = array( "cont" => $contador, "tablas" =>  $tablas[ 0 ] );  

                        $contador++;
                      }
                      
                    echo json_encode( $datos );  
                 }
                 
                break; 
             } 

          case "campos":
             {
                $query = "Describe $tabla";
                
                $db_seleccionada = $conexion -> getConexionDB( $base_datos, "CGeneracionClaseModelo" );
                
                $resultados = DataBase::query( $query, "CGeneracionClasesModelo", null, null, true , $db_seleccionada );
                
                if ( $resultados )
                  {
                     $datos = array();
                     
                     while ( $campos = DataBase::getArrayResult( $resultados ) )
                       {
                          //var_dump( $campos );
                          $datos[ ] = array( "campo" => $campos[ "Field" ], 
                                             "autoincrement" => ( $campos[ 'Extra' ] == "auto_increment" ) ? "auto" : "",
                                             "pri" => $campos[ "Key" ] == "PRI" ? "1" : "" );
                       } 
                       
                    echo json_encode( $datos );
                  }
                  
                break;  
             }  

          case "generar":
             {                
                $modelo = null;
                $generar_clase = true;
                $generar_modelo = true;
                
                if  ( $opcion_generar == 1 )
                  {
                     $modelo = new ModeloBD( $tabla, true, false );
                     $generar_clase = false;
                  }
                else if  ( $opcion_generar == 2 )
                  {
                     $modelo = new ModeloBD( $tabla, false, true );
                     $generar_modelo = false;
                  }  
                else if  ( $opcion_generar == 3 )
                  {
                     $modelo = new ModeloBD( $tabla, true, true );
                  }   
                  
               // var_dump( $opcion_generar, $modelo );  
                  
                if ( $modelo )
                  {
                     $db_seleccionada = $conexion -> getConexionDB( $base_datos, "CGeneracionClaseModelo" );
                     
                     if ( $generar_modelo )
                       {
                           $modelo -> setUbicacion_modelo( $ubicacion_base . $ubicacion_modelo );
                           
                           $modelo_generado = $modelo -> generarModelo( $db_seleccionada, $tabla ); 
                       }
                       
                     if ( $generar_clase )
                       {
                          if ( !$ubicacion_modelo )
                            {
                               $ubicacion_modelo = $ubicacion_clase;
                            }
                          
                          $ubicacion_modelo = $ubicacion_base . $ubicacion_modelo;
                            
                          $objeto_modelo = GeneralORM::generarNombreModelo( $tabla );   
                          $ubicacion_modelo.= "/". $objeto_modelo . ".php";
                          
                          
                          $modelo -> setUbicacion_clase( $ubicacion_base . $ubicacion_clase );
                          $clase_generada = $modelo -> generarClase( $tabla, $ubicacion_modelo, $objeto_modelo, $campo_id, $autoincremental );                          
                       }  
                       
                      $mensaje = array();
                       
                      if ( $opcion_generar == 1 )
                         {
                            $mensaje[ "mensaje" ] = "El(Los) archivo(s) del(os) modelo(s) se ha generado correctamente";
                            $mensaje[ "modelo"  ] = $modelo_generado ? 1 : 0;
                            $mensaje[ "clase"   ] = "";
                         }
                       else if ( $opcion_generar == 2 )
                         {
                            $mensaje[ "mensaje" ] = "El(Los) archivo(s) del(las) clase(s) se ha generado correctamente";
                            $mensaje[ "clase"   ] = $clase_generada ? 1 : 0;
                            $mensaje[ "modelo"  ] = "";
                         }
                       else if ( $opcion_generar == 3 )
                         {
                            $mensaje[ "mensaje" ] = "El(Los) archivo(s) del(las) clase(s) y modelo(s) se han generado correctamente";
                            $mensaje[ "modelo"  ] = $modelo_generado ? 1 : 0;
                            $mensaje[ "clase"   ] = $clase_generada ? 1 : 0;
                         } 
                       else
                         {
                            $mensaje[ "mensaje" ] = "error";
                            $mensaje[ "modelo"  ] = "";
                            $mensaje[ "clase"   ] = "";
                         }     

                       echo json_encode( $mensaje );  
                  } 
                else
                  {
                     echo json_encode( array( "mensaje" => "No se ha generado ningun archivo" ) );
                  }   
             }  
       }
  }
  
//  echo "Datos";
  $conexion -> cerrarConexion();